@@ -0,0 +1,54 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+from __future__ import unicode_literals |
|
| 3 |
+ |
|
| 4 |
+from django.db import models, migrations |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+class Migration(migrations.Migration): |
|
| 8 |
+ |
|
| 9 |
+ dependencies = [ |
|
| 10 |
+ ('account', '0017_auto_20160908_1053'),
|
|
| 11 |
+ ] |
|
| 12 |
+ |
|
| 13 |
+ operations = [ |
|
| 14 |
+ migrations.AddField( |
|
| 15 |
+ model_name='lensmanincomeexpensesinfo', |
|
| 16 |
+ name='freeze_amount', |
|
| 17 |
+ field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u6570\u91cf(\u5206)', verbose_name='freeze_amount'), |
|
| 18 |
+ ), |
|
| 19 |
+ migrations.AddField( |
|
| 20 |
+ model_name='lensmanincomeexpensesinfo', |
|
| 21 |
+ name='freeze_balance', |
|
| 22 |
+ field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u540e\u6570\u91cf(\u5206)', verbose_name='freeze_balance'), |
|
| 23 |
+ ), |
|
| 24 |
+ migrations.AddField( |
|
| 25 |
+ model_name='lensmaninfo', |
|
| 26 |
+ name='freeze_balance', |
|
| 27 |
+ field=models.IntegerField(default=0, help_text='\u6444\u5f71\u5e08\u51bb\u7ed3\u4f59\u989d(\u5206)', verbose_name='freeze_balance'), |
|
| 28 |
+ ), |
|
| 29 |
+ migrations.AddField( |
|
| 30 |
+ model_name='userincomeexpensesinfo', |
|
| 31 |
+ name='freeze_amount', |
|
| 32 |
+ field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u6570\u91cf(\u5206)', verbose_name='freeze_amount'), |
|
| 33 |
+ ), |
|
| 34 |
+ migrations.AddField( |
|
| 35 |
+ model_name='userincomeexpensesinfo', |
|
| 36 |
+ name='freeze_balance', |
|
| 37 |
+ field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u540e\u6570\u91cf(\u5206)', verbose_name='freeze_balance'), |
|
| 38 |
+ ), |
|
| 39 |
+ migrations.AddField( |
|
| 40 |
+ model_name='userinfo', |
|
| 41 |
+ name='freeze_balance', |
|
| 42 |
+ field=models.IntegerField(default=0, help_text='\u7528\u6237\u51bb\u7ed3\u4f59\u989d(\u5206)', verbose_name='freeze_balance'), |
|
| 43 |
+ ), |
|
| 44 |
+ migrations.AlterField( |
|
| 45 |
+ model_name='lensmanincomeexpensesinfo', |
|
| 46 |
+ name='type', |
|
| 47 |
+ field=models.IntegerField(default=0, help_text='\u6536\u652f\u7c7b\u522b', verbose_name='type', choices=[(0, '\u6536\u5165'), (1, '\u652f\u51fa'), (2, '\u89e3\u51bb')]), |
|
| 48 |
+ ), |
|
| 49 |
+ migrations.AlterField( |
|
| 50 |
+ model_name='userincomeexpensesinfo', |
|
| 51 |
+ name='type', |
|
| 52 |
+ field=models.IntegerField(default=0, help_text='\u6536\u652f\u7c7b\u522b', verbose_name='type', choices=[(0, '\u6536\u5165'), (1, '\u652f\u51fa'), (2, '\u89e3\u51bb')]), |
|
| 53 |
+ ), |
|
| 54 |
+ ] |
@@ -51,6 +51,7 @@ class LensmanInfo(CreateUpdateMixin): |
||
| 51 | 51 |
origin = models.IntegerField(_(u'origin'), default=999, help_text=u'摄影师高清图价格(分)') |
| 52 | 52 |
|
| 53 | 53 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'摄影师余额(分)') |
| 54 |
+ freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'摄影师冻结余额(分)') |
|
| 54 | 55 |
|
| 55 | 56 |
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED) |
| 56 | 57 |
refused_reason = models.TextField(_(u'refused_reason'), blank=True, null=True, help_text=u'审核拒绝原因') |
@@ -104,10 +105,12 @@ class LensmanLoginLogInfo(CreateUpdateMixin): |
||
| 104 | 105 |
class LensmanIncomeExpensesInfo(CreateUpdateMixin): |
| 105 | 106 |
INCOME = 0 |
| 106 | 107 |
EXPENSE = 1 |
| 108 |
+ UNFREEZE = 2 |
|
| 107 | 109 |
|
| 108 | 110 |
TYPE = ( |
| 109 | 111 |
(INCOME, u'收入'), |
| 110 | 112 |
(EXPENSE, u'支出'), |
| 113 |
+ (UNFREEZE, u'解冻'), |
|
| 111 | 114 |
) |
| 112 | 115 |
|
| 113 | 116 |
lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True) |
@@ -116,6 +119,8 @@ class LensmanIncomeExpensesInfo(CreateUpdateMixin): |
||
| 116 | 119 |
type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别') |
| 117 | 120 |
amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)') |
| 118 | 121 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)') |
| 122 |
+ freeze_amount = models.IntegerField(_(u'freeze_amount'), default=0, help_text=u'冻结余额增减数量(分)') |
|
| 123 |
+ freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'冻结余额增减后数量(分)') |
|
| 119 | 124 |
|
| 120 | 125 |
remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注') |
| 121 | 126 |
|
@@ -211,6 +216,7 @@ class UserInfo(CreateUpdateMixin): |
||
| 211 | 216 |
location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址') |
| 212 | 217 |
|
| 213 | 218 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'用户余额(分)') |
| 219 |
+ freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'用户冻结余额(分)') |
|
| 214 | 220 |
|
| 215 | 221 |
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED) |
| 216 | 222 |
|
@@ -277,10 +283,12 @@ class UserLoginLogInfo(CreateUpdateMixin): |
||
| 277 | 283 |
class UserIncomeExpensesInfo(CreateUpdateMixin): |
| 278 | 284 |
INCOME = 0 |
| 279 | 285 |
EXPENSE = 1 |
| 286 |
+ UNFREEZE = 2 |
|
| 280 | 287 |
|
| 281 | 288 |
TYPE = ( |
| 282 | 289 |
(INCOME, u'收入'), |
| 283 | 290 |
(EXPENSE, u'支出'), |
| 291 |
+ (UNFREEZE, u'解冻'), |
|
| 284 | 292 |
) |
| 285 | 293 |
|
| 286 | 294 |
user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
@@ -289,6 +297,8 @@ class UserIncomeExpensesInfo(CreateUpdateMixin): |
||
| 289 | 297 |
type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别') |
| 290 | 298 |
amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)') |
| 291 | 299 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)') |
| 300 |
+ freeze_amount = models.IntegerField(_(u'freeze_amount'), default=0, help_text=u'冻结余额增减数量(分)') |
|
| 301 |
+ freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'冻结余额增减后数量(分)') |
|
| 292 | 302 |
|
| 293 | 303 |
remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注') |
| 294 | 304 |
|
@@ -319,6 +319,8 @@ def lensman_origin_photo_upload_api(request): |
||
| 319 | 319 |
type=UserIncomeExpensesInfo.INCOME, |
| 320 | 320 |
amount=order.total_fee, |
| 321 | 321 |
balance=from_user.balance, |
| 322 |
+ freeze_amount=0, |
|
| 323 |
+ freeze_balance=from_user.freeze_balance, |
|
| 322 | 324 |
remark=u'高清图购买退款', |
| 323 | 325 |
) |
| 324 | 326 |
|
@@ -330,7 +332,7 @@ def lensman_origin_photo_upload_api(request): |
||
| 330 | 332 |
|
| 331 | 333 |
if to_user: |
| 332 | 334 |
# 减少余额 |
| 333 |
- to_user.balance -= order.total_fee |
|
| 335 |
+ to_user.freeze_balance -= order.total_fee |
|
| 334 | 336 |
to_user.save() |
| 335 | 337 |
# 余额记录 |
| 336 | 338 |
UserIncomeExpensesInfo.objects.create( |
@@ -339,6 +341,8 @@ def lensman_origin_photo_upload_api(request): |
||
| 339 | 341 |
type=UserIncomeExpensesInfo.EXPENSE, |
| 340 | 342 |
amount=order.total_fee, |
| 341 | 343 |
balance=to_user.balance, |
| 344 |
+ freeze_amount=0, |
|
| 345 |
+ freeze_balance=to_user.freeze_balance, |
|
| 342 | 346 |
remark=u'高清图购买退款', |
| 343 | 347 |
) |
| 344 | 348 |
|
@@ -393,6 +397,29 @@ def lensman_origin_photo_upload_api(request): |
||
| 393 | 397 |
|
| 394 | 398 |
set_lensman_order_record(porder) |
| 395 | 399 |
|
| 400 |
+ # 摄影师余额解冻 |
|
| 401 |
+ try: |
|
| 402 |
+ to_user = UserInfo.objects.select_for_update().get(user_id=order.to_uid) |
|
| 403 |
+ except UserInfo.DoesNotExist: |
|
| 404 |
+ pass |
|
| 405 |
+ |
|
| 406 |
+ if to_user: |
|
| 407 |
+ # 减少余额 |
|
| 408 |
+ to_user.balance += order.total_fee |
|
| 409 |
+ to_user.freeze_balance -= order.total_fee |
|
| 410 |
+ to_user.save() |
|
| 411 |
+ # 余额记录 |
|
| 412 |
+ UserIncomeExpensesInfo.objects.create( |
|
| 413 |
+ user_id=order.to_uid, |
|
| 414 |
+ photo_id=order.photo_id, |
|
| 415 |
+ type=UserIncomeExpensesInfo.UNFREEZE, |
|
| 416 |
+ amount=order.total_fee, |
|
| 417 |
+ balance=to_user.balance, |
|
| 418 |
+ freeze_amount=order.total_fee, |
|
| 419 |
+ freeze_balance=to_user.freeze_balance, |
|
| 420 |
+ remark=u'高清图购买退款', |
|
| 421 |
+ ) |
|
| 422 |
+ |
|
| 396 | 423 |
order.photo_status = OrderInfo.FETCHED |
| 397 | 424 |
order.save() |
| 398 | 425 |
|
@@ -142,7 +142,12 @@ def order_paid_success(order): |
||
| 142 | 142 |
except UserInfo.DoesNotExist: |
| 143 | 143 |
return |
| 144 | 144 |
|
| 145 |
- user.balance += order.total_fee |
|
| 145 |
+ if order.photo_type == OrderInfo.NOMARK: |
|
| 146 |
+ amount, freeze_amount = total_fee, 0 |
|
| 147 |
+ user.balance += amount |
|
| 148 |
+ elif order.photo_type == OrderInfo.ORIGIN: |
|
| 149 |
+ amount, freeze_amount = 0, total_fee |
|
| 150 |
+ user.freeze_balance += freeze_amount |
|
| 146 | 151 |
user.save() |
| 147 | 152 |
|
| 148 | 153 |
ymd = tc.local_string(format='%Y%m%d') |
@@ -162,8 +167,10 @@ def order_paid_success(order): |
||
| 162 | 167 |
user_id=to_uid, |
| 163 | 168 |
photo_id=order.photo_id, |
| 164 | 169 |
type=UserIncomeExpensesInfo.INCOME, |
| 165 |
- amount=total_fee, |
|
| 170 |
+ amount=amount, |
|
| 166 | 171 |
balance=user.balance, |
| 172 |
+ freeze_amount=freeze_amount, |
|
| 173 |
+ freeze_balance=user.freeze_balance, |
|
| 167 | 174 |
remark=u'图片购买', |
| 168 | 175 |
) |
| 169 | 176 |
|